Go modules 是 Go 语言从 1.11 版本开始引入的依赖管理系统
# 特点
- 模块化设计:
- Go modules 将代码组织成相互独立的模块,每个模块都有自己的版本号和依赖关系。
- 这种模块化设计使得代码更加清晰、可维护,同时也解决了以前 Go vendor 机制存在的一些问题。
- 版本控制:
- Go modules 采用语义版本控制 (Semantic Versioning) 的方式来管理依赖包的版本。
- 开发者可以精确地指定需要使用的依赖包版本,避免因版本问题导致的兼容性问题。
- 依赖管理:
- Go modules 使用
go.mod
文件来声明项目的依赖关系。 - 当运行
go get
、go build
等命令时,Go 会自动解析并下载所需的依赖包。 - 依赖包会被缓存在本地,提高构建速度。
- Go modules 使用
- 向后兼容:
- Go modules 引入了版本号后缀 (如
v2
,v3
等) 来区分不同的主版本。 - 这使得项目可以平滑地升级到新的主版本,而不会破坏现有的代码。
- Go modules 引入了版本号后缀 (如
- Go get 的变化:
- 在 Go modules 出现之前,
go get
命令会将依赖包直接下载到$GOPATH/src
目录。 - 而在 Go modules 中,
go get
会将依赖包下载到一个临时目录,并将其添加到go.mod
文件中。
- 在 Go modules 出现之前,
- 模块代理:
- Go modules 引入了模块代理的概念,开发者可以设置自己的模块代理服务,加快依赖包的下载速度。
- 常见的模块代理有
Athens
、Goproxy.cn
等。
- 迁移过程:
- 对于已有的 Go 项目,可以通过
go mod init
命令初始化go.mod
文件,然后使用go mod tidy
命令来管理依赖。 - 这样可以平滑地将项目从旧的依赖管理机制迁移到 Go modules。
- 对于已有的 Go 项目,可以通过